package br.ufpi.esii.reqg.entities;

import java.util.Date;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;

import br.ufpi.esii.reqg.enums.SituacaoDaRevisao;

@Entity
public class Revisao {

	@Id
	private Long id;

	@ManyToOne( optional = false )
	private Projeto projeto;

	@Column( nullable = false )
	private String identificador;

	@Column( nullable = false )
	private String descricao;

	@Column( nullable = false )
	private Date data;

	@ManyToMany
	@JoinColumn( nullable = false )
	private Set<Membro> membrosParticipantes;

	@ManyToMany
	@JoinColumn( nullable = false )
	private Set<Membro> clientesParticipantes;

	@Column( nullable = false )
	private SituacaoDaRevisao situacao;

	@OneToMany( mappedBy = "revisao", fetch = FetchType.EAGER, cascade = CascadeType.ALL )
	private Set<ItemDaRevisao> itens;

	public Long getId() {
		return id;
	}

	public void setId( Long id ) {
		this.id = id;
	}

	public String getIdentificador() {
		return identificador;
	}

	public void setIdentificador( String identificador ) {
		this.identificador = identificador;
	}

	public String getDescricao() {
		return descricao;
	}

	public void setDescricao( String descricao ) {
		this.descricao = descricao;
	}

	public Date getData() {
		return data;
	}

	public void setData( Date data ) {
		this.data = data;
	}

	public SituacaoDaRevisao getSituacao() {
		return situacao;
	}

	public void setSituacao( SituacaoDaRevisao situacao ) {
		this.situacao = situacao;
	}

	public Projeto getProjeto() {
		return projeto;
	}

	public void setProjeto( Projeto projeto ) {
		this.projeto = projeto;
	}

	public Set<Membro> getClientesParticipantes() {
		return clientesParticipantes;
	}

	public void setClientesParticipantes( Set<Membro> clientesParticipantes ) {
		this.clientesParticipantes = clientesParticipantes;
	}

	public Set<Membro> getMembrosParticipantes() {
		return membrosParticipantes;
	}

	public void setMembrosParticipantes( Set<Membro> membrosParticipantes ) {
		this.membrosParticipantes = membrosParticipantes;
	}

	public Set<ItemDaRevisao> getItens() {
		return itens;
	}

	public void setItens( Set<ItemDaRevisao> itens ) {
		this.itens = itens;
	}

}
